package e_Stream流.Stream流的创建方式;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * Stream流的创建：
 * 通过数组/集合创建
 * 顺序流 和 并行流：
 * stream是顺序流，由主线程按顺序对流执行操作，而 parallelStream是并行流，内部以多线程并行执行的方式对流进行操作，
 * 但前提是流中的数据处理没有顺序要求（如果流中的数据量足够大，并行流可以加快处理速度）。
 *
 * @author xuyaxu
 * @date 2022/8/7 23:49
 */
public class CreateStreamDemo {
    public static void main(String[] args) {
        // 1. 通过 java.util.Arrays.stream(T[]array)方法用数组创建流
        int[] array = {1, 3, 5, 6, 8};
        IntStream arrStream = Arrays.stream(array);

        // 2. 通过 java.util.Collection.stream() 方法用集合创建流
        List<String> list = Arrays.asList("a", "b", "c");
        // 创建一个“顺序流”
        Stream<String> stream = list.stream();
        // 创建一个“并行流”
        Stream<String> parallelStream = list.parallelStream();

        // 3. 通过 Stream的静态方法：of()、iterate()、generate()创建流
        Stream<Integer> stream2 = Stream.of(1, 2, 3, 4, 5, 6);
        Stream<Integer> stream3 = Stream.iterate(0, (x) -> x + 3).limit(4);
        stream3.forEach(System.out::println);
        Stream<Double> stream4 = Stream.generate(Math::random).limit(3);
        stream4.forEach(System.out::println);

        // 4. 可以通过 parallel()把顺序流转换成并行流
        Optional<Integer> findFirst = stream2.parallel().filter(x -> x > 6).findFirst();
    }
}
